package leetcode290周赛;
import java.util.TreeSet;
import java.util.HashSet;
import java.util.Set;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.HashMap;
public class One {
	public static void main(String []args) {
		int arr [][] = {{44,21,47}};
		System.out.println(solutionOne(arr));
		System.out.println(solutionByArignote(arr));
	}
	public static List<Integer> solution(int nums[][]) {
		//int ans [] = new int[nums[0].length];
		TreeSet<Integer> ans = new TreeSet<>();
		HashSet<Integer> set = new HashSet<>();
		for(int arr[] : nums) {
			for(int  i : arr) {
				if(set.contains(i) )
					ans.add(i);
				else
					set.add(i);
			}
		}
	return new ArrayList<>(ans);
	}
	public static List<Integer> solutionOne(int nums[][]){
		List<Integer> ans = new ArrayList<>();
		int cnt = nums.length; 
		HashMap<Integer,Integer> record = new HashMap<>();
		for(int arr [] : nums) {
			for(int i : arr) {
				if(record.containsKey(i)) {
					record.put(i, record.get(i) + 1);
//					if(record.get(i) == cnt) {
//						ans.add();
//					}
//					int times = record.get(i) + 1;
//					if(times  == cnt) {
//						ans.add(i);
//					}
//					else
//						record.put(i, times);
//					
				}
				else
					record.put(i,1);
			 if(record.get(i) == cnt) {
				 ans.add(i);
			 }
			}
		}
//		Arrays.sort();
		Collections.sort(ans);
		return ans;
	}
	/**
	 * 无论上面 的解法 还是 下面的 解法 
	 * 都得 想到 一个点就是  公共数据 在 每个子数组都出现了 
	 * 那这 些数据的   出现的次数 和  len  之间的 关系  
	 * 
	 * 特点 用数组 模拟 数字出现的次数
	 * 因为数据量 比较小 可以直接 用数组 模拟
	 * 速度 稍微 快一些
	 *而且 这个 结果 收集起来 就是 有序的 还不用进行排序
	 */
	public static List<Integer> solutionByArignote(int nums[][]){
		List<Integer> ans = new ArrayList<>();
		int cnt [] = new int [1001];
		for(int arr [] : nums) {
			for(int i : arr) {
				cnt[i]++;
			}
		}
		int  len = nums.length;
//		for(int i: cnt) {
//			if(i == len) {
//				ans.add(i);
//			}
//		}
		for(int  i = 0; i < cnt.length;i++) {
			if(cnt[i] == len)
				ans.add(i);
		}
		return ans;
	}
	
}
